﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel;

namespace EcodexIntegrationSample
{
    class frmCancelaMultipleController
    {
        private View.IfrmCancelaMultiple _view;

        public frmCancelaMultipleController(View.IfrmCancelaMultiple view)
        {
            _view = view;
            _view.onCancelaMultiple += View_onCancelaMultiple;
        }

        void View_onCancelaMultiple(object sender, EventArgs e)
        {
            using (var Cancelacion = new SrvCancelacion.CancelacionesClient())
            {
                long trsId = _view.TransaccionId;
                string token = string.Empty;
                string trsIdO=string.Empty;

                string Error = string.Empty;
                Utils.Utilerias Util = new Utils.Utilerias(_view);
                Error = Util.CreateToken(_view.RFC, trsId, ref token);
                if (!string.IsNullOrEmpty(Error))
                {
                    _view.ShowUnknownError(Error);
                    return;
                }
                try
                {
                    string[] listado = _view.listaUUID.Split(',');
                    var lista = new SrvCancelacion.ListaCancelar();
                    string resultado = string.Empty;

                    foreach (string uuid in listado)
                    {
                        lista.Add(Guid.Parse(uuid));
                    }

                    var respuesta = Cancelacion.CancelaMultiple(lista, _view.RFC, token, trsId, out trsIdO);

                    foreach (var item in respuesta)
                    {
                        resultado += string.Format("UUID : {0} Estatus : {1}\n", item.UUID, item.Estatus);
                    }
                    _view.Respuesta = resultado;

                }
                catch (FaultException<SrvCancelacion.FallaValidacion> validationFault)
                {
                    using (var errorForm = new Forms.Error(TranslateFault.ToValidationError(validationFault.Detail)))
                    {
                        errorForm.ShowDialog();
                    }
                }
                catch (FaultException<SrvCancelacion.FallaServicio> serviceFault)
                {
                    using (var errorForm = new Forms.Error(TranslateFault.ToServiceError(serviceFault.Detail)))
                    {
                        errorForm.ShowDialog();
                    }
                }
                catch (FaultException<SrvCancelacion.FallaSesion> sessionFault)
                {
                    using (var errorForm = new Forms.Error(TranslateFault.ToSessionError(sessionFault.Detail)))
                    {
                        errorForm.ShowDialog();
                    }
                }
                catch (TimeoutException)
                {
                    _view.ShowUnknownError("Error de tiempo de espera del servicio");
                }
                catch (Exception ex)
                { _view.ShowUnknownError(ex.Message); }
            }
        }
    }
}
